連假邁入第二天,想必大家的中秋夜晚一定很精彩吧!雖然可能隔天還要上班,或是跟筆者一樣坐在電腦前,但願各位都能擁有美好的回憶。回到正題,昨天在提到了 launch 的架構還有怎麼創建後,今天就來說說怎麼去讀懂一個完整的 launch 檔,還有要怎麼把想要結合的模塊去做匯整,幫助大家在初學階段時整合一個屬於自己的 launch 啦!那就開始今天的介紹吧!
今天我們就要來分析下 launch 中的內容來跟大家做個介紹,雖然我已經說過它是由Xml的格式製作而成,但對於標籤之內的細節,還是要有基本的了解。
<launch>
......
<launch/>
通常我們可以看到 launch 檔內會出現 <tabname> <tabname/>
,此稱之為標籤,通常內容就是我們要開啟的目標。而 launch 檔的所有內容,都必須被 <launch> <launch/>
包含在內,否則它就是一個普通的文字檔。
這邊舉幾個比較常見的參數:
在 launch 內也可以對節點進行設置開啟的時機或者跳過那些節點:
首先節點必須先設置如下:
<arg name="load_driver" default="true"/>
如此當你想要打開這個節點所在的launch又不想啟動它時,可以於終端輸入以下程式碼:
roslaunch pkg node load_driver:=false
如此一來就不會執行它了
前面提過,launch 只能從自己的 Package 中提取資料跟 Node,那如果想把兩個 launch 結合起來呢?是不是要把兩個 Package 融合?這邊就要教大家一個小工具啦!
你只需要開啟一個新 package,在 launch 內使用內使用 <include>
這個標籤就可以啦。那要怎麼使用呢?必須在 launch 檔中添加以下程式碼:
<include file="$(find packagename)/launch/yourname.launch">
首先我們來看看它的構成
file="$(find robotcontrol
)/launch/test.launch"
這一串都是在說明檔案的位置。我推薦照著上面的步驟寫,後面說明原因
其中所標示的是你想要加入的 launch 所在的所在的 Package 名稱,後面就是檔案所在的路徑位置。那這樣寫的好處是,我們是藉由 Package 來去尋找目標,假設你今天換了電腦後存放路徑變不一樣,只要 Package 存在電腦內就能夠順利地開啟。
接下來分析兩個 launch 來作說明幫助理解:
首先看到<arg name="..........." default="........" doc="modle type[....]"/>
當中 arg, name 前面有提過了,來說說 default 跟 doc:
可以看到 default
後面的資料 $(env ...),代表說預設的環境參數,env 為環境的縮寫,而後面的 doc
則為資料的型態,如同下面 <praram>
裡的 value
是同個意思,這邊提到一下筆者蒐集的資料中,有人說明使用 doc
是因為 <arg>
中不能使用 value
,有興趣可以回去試一下,因為通常我們會改動的只有 model type 後方的機器人名稱而已。
再來看到下方 <!--gmapping-->
裡開啟節點的部分 <node...>
,最後有個 output
,這個指令的意思是輸出 log 的目標(screen : console, log: log file)
接著下面就是針對不同的環境參數進行命名,給定預設數值的部分,這邊就不作介紹了,相信大家都已經看懂了。
這裡我們直接看到中間 <include>
,就像我們上面所講的,這邊就是在將不同的 launch 來做結合。中間都是在給定這個導入的 launch 我們想要的參數。至於最後下面的 <param>
是在說明機器人的描述檔,有興趣的可以在電腦中打開來欣賞一下,這個檔案試在你建模匯出時系統自動生成的,所以不要想說要自己寫出一台機器人,太嚇人了!
最後只要你對於自己所需要的 Node ,還有 launch 去做個統整後,依照上面所提供的工具,只需要打下面的指令在終端機,就能夠順利執行啦,這樣就算是了解launch的基礎了喔!
roslaunch [yourname_package] your.launch
想要更多請點這
對於 launch 的介紹就算告個段落啦,但是這些只是很基本的東西,如果想要學習得更快更精深,最好的方法就是觀察那些別人已經完成而且運作順暢的檔案,然後一步步的了解裡面的內容,相信對於學習的進步會有相當顯著的效果。明天開始我們則會介紹 gazebo 中記錄世界參數的 world 檔啦!請大家敬請期待!!